package com.jiang.daily.Q2145;

/**
 * @author Jiang
 * @version 1.0
 * @date 2025/04/21 12:38
 */
public class Solution {
    public int numberOfArrays(int[] differences, int lower, int upper) {
        int x = 0, y = 0, cur = 0;
        for (int d : differences) {
            cur += d;
            x = Math.min(x, cur);
            y = Math.max(y, cur);
            if (y - x > upper - lower) {
                return 0;
            }
        }
        return (upper - lower) - (y - x) + 1;
    }

//    public int numberOfArrays(int[] differences, int lower, int upper) {
//        int res = 0;
//        int l = lower, r = upper; // l表示左边界，r表示右边界
//        for (int i = 0; i < differences.length; i++) {
//            if (differences[i] <= 0) { // 如果当differences[i]小于或等于0
//                if (r + differences[i] < lower) {
//                    return 0;
//                }
//                int t = r;
//                boolean flag = false;
//                while (l + 1 < r) { // 二分查找
//                    int mid = l + (r - l) / 2; // 中间值
//                    if (mid + differences[i] < lower) {
//                        l = mid;
//                    } else {
//                        r = mid;
//                    }
//                }
//                l = (l + differences[i] >= lower) ? l : l + 1;
//                r = t;
//            } else {
//                if (l + differences[i] > upper) {
//                    return 0;
//                }
//                int t = l;
//                while (l + 1 < r) { // 二分查找
//                    int mid = l + (r - l) / 2; // 中间值
//                    if (mid + differences[i] > upper) {
//                        r = mid;
//                    } else {
//                        l = mid;
//                    }
//                }
//                l = t;
//                r = (r + differences[i] <= upper) ? r : r - 1;
//            }
//
//            l += differences[i]; // 下一轮循环的左边界
//            r += differences[i]; // 下一轮循环的右边界
//        }
//        return r - l + 1;
//    }
}
